作者:陈旺财九_999 | 来源:互联网 | 2024-11-22 17:01
前言:本文由编程笔记编辑团队精心整理,旨在为读者提供关于 C++ 中 String 和 Vector 的深入理解,以提升编程技能。
String 类型详解
在 C++ 中,string 类位于标准库 内,并且属于 std 命名空间。string 是一种特殊的类,用于处理文本字符串。
可以使用等号 "=" 对 string 对象进行赋值操作,也可以使用加号 "+" 来拼接两个 string 对象。无需担心目标 string 是否有足够的空间来存储新的值,因为 C++ 会自动管理这些细节。此外,可以直接使用关系运算符(如 <, >, ==, != 等)来比较两个 string 对象的值。
string phrase; // 创建一个空的 string 对象
string noun("ants"); // 使用字符串常量初始化 string 对象
string noun = "ants"; // 同上,但使用了不同的语法形式
当使用 >> 运算符从标准输入读取 string 时,它会在遇到第一个空白字符时停止。若需读取包含空格的整行文本,应使用 getline 函数。
getline(cin, str); // 读取一行文本
getline(cin, str, '?'); // 读取至 '?' 字符为止,'?' 将被读取并丢弃
getline 函数的返回值不是 void,而是引用了第一个参数,这使得可以在链式调用中使用 getline。
getline(cin, s1) >> s2 == getline(cin, s1); cin >> s2;
每个 string 对象都提供了 length 成员函数,用于获取字符串的实际长度。使用方括号 "[]" 访问 string 中的字符不会进行越界检查,但可以通过成员函数 at 实现安全的访问。
str[6] == str.at(6)
对于 C 风格的字符串操作函数(如 strcpy),它们不接受 C++ 的 string 对象作为参数。若要使用这些函数,需要先通过 c_str 成员函数将 string 转换为 C 风格的字符串。
char carr[] = "test"; // C 风格的字符串
string s = "test"; // C++ 的 string 对象
strcpy(carr, s.c_str()); // 正确的转换方式
Vector 容器解析
vector 容器类似于传统的数组,但具有动态调整大小的能力,是 C++ STL(标准模板库)的重要组成部分。
vector v; // 定义一个空的整数 vector
vector 是一个模板类,这意味着它可以用来创建任何类型的容器,例如 vector 表示一个整数类型的 vector。声明时调用了 vector 的默认构造函数,初始化了一个空的 vector 对象。
可以使用 "[]" 下标操作符访问 vector 中的元素。与数组不同,"[]" 只能用于修改已存在的元素,不能用于初始化新元素。向 vector 添加新元素时,通常使用 push_back 方法,该方法会将新元素添加到 vector 的末尾。
vector a;
a.push_back(1);
a.push_back(10);
a.push_back(101);
vector 支持使用赋值运算符 "=" 进行整体复制。vector 的大小(即元素数量)可以通过 size 成员函数获取,其返回值类型为 unsigned int。
vector 提供了一个带参数的构造函数,可以初始化指定数量的元素。对于复杂类型的元素,构造函数会调用该类型的默认构造函数来初始化这些元素。
vector v(10); // 初始化 10 个元素,全部设置为 0
vector v;
for (unsigned int i = 0; i <10; i++) {
v[i] = i; // 只能在声明后立即执行
}
vector 的定义位于标准库 中,并使用 std 命名空间。尝试访问超出 vector 当前大小的元素不会引发编译错误,但会导致未定义行为。
vector 的容量(capacity)是指其当前分配的内存空间能够存储的最大元素数量,可以通过 capacity 成员函数查询。当 vector 的容量不足以容纳更多元素时,它会自动扩展。也可以通过 reserve 成员函数手动增加 vector 的容量。
v.reserve(32); // 设置容量至少为 32 个元素
v.reserve(v.size() + 10); // 设置容量至少比当前大小多 10 个元素
需要注意的是,reserve 方法只能增加 vector 的容量,而不能减少。如果需要改变 vector 的大小,可以使用 resize 成员函数。resize 方法在增加大小时会使用元素类型的默认构造函数初始化新元素,在减少大小时会删除多余的元素。